1. Field of the Invention
The invention concerns a device driver which provides for dynamic extensible functionality without the need for recompilation of the device driver. For example, the present invention can be implemented in a printer driver which interfaces to an operating system, whereby the printer driver detects a driver plug-in module, provides information corresponding to the detected driver plug-in module to the operating system, and then dynamically accesses the functionality of the detected driver plug-in module.
2. Description of the Related Art
Typically, a device driver, such as a printer driver, is installed on a workstation or computer in order to support access to and use of the corresponding device, such as a printer. Device drivers are generally developed and provided by the manufacturer of the corresponding device, and are installed when the corresponding device is physically installed in a computing environment, or before a user begins to use an already-installed device.
A device driver in a windowing operating system is typically comprised of multiple files known as dynamic link library (.dll) files, each of which implements a major functional component of the device driver. For example, a printer driver may be comprised of a user interface .dll file for displaying user interface property sheets, a graphics rendering .dll file for handling the necessary rendering of image data, and other .dll files representing other functional components of the printer driver. In such an example, the user interface .dll file contains compiled code to implement the user interface functionality for the printer driver by utilizing and accessing operating system interface calls. In this manner, the user interface .dll file provides necessary information and parameters to the operating system so that desired user interface property sheets for the printer driver can be displayed on a user's display.
In addition, the user interface .dll file has the necessary functional code to dynamically provide background support for the displayed user interface. For instance, the user interface may include buttons and dialog features for selecting black-and-white printing or color printing, whereupon, when the user selects black-and-white printing, the functional code of the user interface .dll file acknowledges the user's selection on the displayed user interface property sheet and sets an internal flag to pass to the graphics rendering .dll file to implement the user's selection.
As mentioned above, a .dll file of a device driver implements a given functionality of the device driver, such as a user interface .dll file and a graphics rendering .dll file for a printer driver. Each .dll file may itself contain calls to other .dll files. For example, a user interface .dll file may provide a user interface comprised of several tabbed property sheets for the user to choose from depending on the type of device functionality that the user wishes to access and/or modify. In such a case, the user interface .dll file may contain fixed calls to other predetermined .dll files representing each of the tabbed property sheets of the user interface.
Device drivers as described above are typically compiled by the developer of the device driver after which they are statically fixed with respect to the functional capabilities of the device driver. For example, the user interface .dll file is compiled before distribution and subsequent installation on a user's computer, whereupon the user interface property sheets which are displayed and supported by the user interface .dll file will always be the same. Even in the example discussed above in which the user interface .dll file contains fixed calls to other predetermined .dll files, the identity of each of the other predetermined .dll files is always fixed upon compilation of the user interface .dll file.
Accordingly, the functionality of a device driver which is installed on a user's computer is statically fixed and cannot be readily modified to add additional functionality that may be desired by the user, or by a network administrator in a networked computing environment. For example, a network administrator may wish to have a user's printer driver support network-wide printing applications, such as secure printing and job accounting. The printer driver as described above cannot readily be modified by the administrator to add such functionality. Instead, the developer of the printer driver would have to modify the user interface .dll file, as well as other .dll files, to add such functionality, and then recompile and test the .dll files. The modified .dll files of the printer driver would then have to be installed on the user's computer. It can be appreciated that this modification process is cumbersome and inefficient for users, network administrators and device driver developers, every time the addition of new functionality into a device driver is desired.